Alinhando um elemento bloco dentro de outro elemento bloco

Como sabemos o estilo de exibição dos boxes dos elementos pelo browser é static e é como empilhar caixas de cima para baixo e da esquerda para a direita. Este é o default do browser (além de display:block, boxsizing:borderbox).

No exemplo 1 vamos colocar uma div dentro da outra fica assim:
        .classe1{
            height:200px;
            width:200px;
            background-color:lightgreen;
        }

        .classe2{
            height:100px;
            width:100px;
            background-color:lightblue;
        }

        <div class="classe1">
            DIV1
            <div class="classe2">Div2</div>
        </div>

Como o browser exibe:
DIV1
Div2


Podemos ver que a DIV2 esta dentro do espaço da DIV1 e seu posicionamento foi à esquerda logo depois da mensagem DIV1. Se não houvesse a mensagem os cantos superiores esquerdo seriam no mesmo ponto.



Adicionando position:relative a primeira div não muda o position-static pois o position-relative apenas desloca do position-static de um valor mas como não definimos ainda ele é zero e a posição continua a mesma.
Podemos colocar position absolute no segundo div mais interno que nada ainda é modificado no posicionamento.
Contudo fixando a relação entre a div interna e a div externa temos o seguinte resultado:
DIV1
Div2


Importante : Ao colocarmos na CSS o top de 50% não significa que nosso elemento vai ficar no centro mas sim que vai começar a ser renderizado a 50% do elemento pai. Isto não obrigatoriamente coloca nosso objeto interno no centro especialmente se ele for grande. E isso vale tanto para o top, bottom, left e right
Portanto, ainda não esta no centro.

Agora na div interna precisamos definir que ela vá 50% para cima e 50% para esquerda do tamanho da div interna e ai a div interna estará no centro. Isto é feito pelo estilo transform:translate(-50%,-50%).
DIV1
Div2